<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Web2py</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Web2py"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Web2py rootpage-Web2py skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main">web2py</span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1251242444">
/* start https://en.wikipedia.org/ */
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style>
<style data-mw-deduplicate="TemplateStyles:r1295905060">
/* start https://en.wikipedia.org/ */
.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}
/* end https://en.wikipedia.org/ */
</style><table class="infobox vevent"><tbody><tr><th colspan="2" class="infobox-above summary">web2py Enterprise Web Framework</th></tr><tr><td colspan="2" class="infobox-image logo"><div class="infobox-caption">web2py logo</div></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Programmer" title="Programmer">Original author(s)</a></th><td class="infobox-data">Massimo Di Pierro</td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;">Initial release</th><td class="infobox-data">September 27, 2007<span style="display:none"> (<span class="bday dtstart published updated">2007-09-27</span>)</span></td></tr><tr style="display: none;"><td colspan="2" class="infobox-full-data"></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Software_release_life_cycle" title="Software release life cycle">Stable release</a></th><td class="infobox-data"><div style="margin:0px;">2.27.1<sup id="cite_ref-wikidata-f3fe63ae355e0f9cef1873a010dccf77c60e7033-v20_1-0" class="reference"><a href="#cite_note-wikidata-f3fe63ae355e0f9cef1873a010dccf77c60e7033-v20-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
/ 16 November 2023<span style="display:none"> (<span class="bday dtstart published updated">16 November 2023</span>)</span></div></td></tr><tr style="display:none"><td colspan="2">
</td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Repository_(version_control)" title="Repository (version control)">Repository</a></th><td class="infobox-data"><span class="url"><a rel="nofollow" class="external text" href="https://github.com/web2py/web2py">Web2py Repository</a></span></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;">Written in</th><td class="infobox-data"><a href="Python_(programming_language)" title="Python (programming language)">Python</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Computing_platform" title="Computing platform">Platform</a></th><td class="infobox-data"><a href="Cross-platform" class="mw-redirect" title="Cross-platform">Cross-platform</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Software_categories#Categorization_approaches" title="Software categories">Type</a></th><td class="infobox-data"><a href="Web_application_framework" class="mw-redirect" title="Web application framework">Web application framework</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Software_license" title="Software license">License</a></th><td class="infobox-data"><a href="LGPL" class="mw-redirect" title="LGPL">GNU Lesser General Public License</a> version 3 (LGPLv3)</td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;">Website</th><td class="infobox-data"><a rel="nofollow" class="external text" href="http://www.web2py.com">www.web2py.com</a></td></tr></tbody></table>
<p><b>Web2py</b> is an <a href="Open-source_software" title="Open-source software">open-source</a> <a href="Web_application_framework" class="mw-redirect" title="Web application framework">web application framework</a> written in the <a href="Python_(programming_language)" title="Python (programming language)">Python</a> <a href="Programming_language" title="Programming language">programming language</a>. Web2py allows <a href="Web_developers" class="mw-redirect" title="Web developers">web developers</a> to program <a href="Dynamic_web_content" class="mw-redirect" title="Dynamic web content">dynamic web content</a> using <a href="Python_(programming_language)" title="Python (programming language)">Python</a>. Web2py is designed to help reduce tedious web development tasks, such as developing <a href="Web_form" class="mw-redirect" title="Web form">web forms</a> from scratch, although a web developer may build a <a href="Form_(HTML)" class="mw-redirect" title="Form (HTML)">form</a> from scratch if required.<sup id="cite_ref-web2py_2-0" class="reference"><a href="#cite_note-web2py-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>Web2py was originally designed as a teaching tool with emphasis on ease of use and <a href="Software_deployment" title="Software deployment">deployment</a>. Therefore, it does not have any project-level configuration files. The design of web2py was inspired by the <a href="Ruby_on_Rails" title="Ruby on Rails">Ruby on Rails</a> and <a href="Django_(web_framework)" title="Django (web framework)">Django</a> frameworks. Like these frameworks, web2py focuses on <a href="Rapid_application_development" title="Rapid application development">rapid development</a>, favors <a href="Convention_over_configuration" title="Convention over configuration">convention over configuration</a> approach and follows a <a href="Model%E2%80%93view%E2%80%93controller" title="Model–view–controller">model–view–controller</a> (MVC) <a href="Architectural_pattern_(computer_science)" class="mw-redirect" title="Architectural pattern (computer science)">architectural pattern</a>.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Overview">Overview</h2></div>
<p>Web2py is a full-stack framework in that it has built-in components for all major functions, including:
</p>
<ul><li><a href="HTTP" title="HTTP">HTTP</a> requests, HTTP responses, <a href="Web_cookie" class="mw-redirect" title="Web cookie">cookies</a>, <a href="Session_(computer_science)" title="Session (computer science)">sessions</a>;</li>
<li>multiple protocols<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> <a href="HTML" title="HTML">HTML</a>/<a href="XML" title="XML">XML</a>, <a href="Representational_State_Transfer" class="mw-redirect" title="Representational State Transfer">REST</a>, <a href="Atom_(web_standard)" title="Atom (web standard)">ATOM</a> and <a href="RSS" title="RSS">RSS</a>, <a href="Rich_Text_Format" title="Rich Text Format">RTF</a> and <a href="Comma-separated_values" title="Comma-separated values">CSV</a>, <a href="JSON" title="JSON">JSON</a>, <a href="JSON-RPC" title="JSON-RPC">JSON-RPC</a> and <a href="XML-RPC" title="XML-RPC">XML-RPC</a>, <a href="Action_Message_Format" title="Action Message Format">AMF-RPC</a> (<a href="Adobe_Flash" title="Adobe Flash">Flash</a>/<a href="Adobe_Flex" class="mw-redirect" title="Adobe Flex">Flex</a>), and <a href="SOAP" title="SOAP">SOAP</a>;<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup></li>
<li><a href="Create%2C_read%2C_update_and_delete" title="Create, read, update and delete">CRUD</a> <a href="API" title="API">API</a>;</li>
<li>multiple <a href="Authentication" title="Authentication">authentication</a> mechanisms and <a href="Role-based_access_control" title="Role-based access control">role-based access control</a>;</li>
<li><a href="Database_abstraction_layer" title="Database abstraction layer">database abstraction layer</a> (DAL) that dynamically generates <a href="SQL" title="SQL">SQL</a> and runs on multiple compatible database backends;</li>
<li><a href="Random-access_memory" title="Random-access memory">RAM</a>, <a href="Hard_disk_drive" title="Hard disk drive">disk</a>, and <a href="Memcached" title="Memcached">memcached</a>-based <a href="Cache_(computing)" title="Cache (computing)">caching</a> for <a href="Scalability" title="Scalability">scalability</a>;</li>
<li><a href="I18n" class="mw-redirect" title="I18n">internationalization</a> support;</li>
<li><a href="JQuery" title="JQuery">jQuery</a> for <a href="Ajax_(programming)" title="Ajax (programming)">Ajax</a> and <a href="User_interface" title="User interface">UI</a> effects;</li>
<li>automatic logging of errors with context.</li></ul>
<p>Web2py encourages sound <a href="Software_engineering" title="Software engineering">software engineering</a> practices such as
</p>
<ul><li>the <a href="Model%E2%80%93view%E2%80%93controller" title="Model–view–controller">model–view–controller</a> (MVC) pattern;</li>
<li>self-submission<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> of <a href="Web_form" class="mw-redirect" title="Web form">web forms</a>;</li>
<li><a href="Server-side" class="mw-redirect" title="Server-side">server-side</a> sessions;</li>
<li>safe handling of uploaded files.</li></ul>
<p>Web2py uses the <a href="Web_Server_Gateway_Interface" title="Web Server Gateway Interface">WSGI</a> protocol, the Python-oriented protocol for <a href="Communication" title="Communication">communication</a> between <a href="Web_server" title="Web server">web server</a> and web applications. It also provides handlers for <a href="Common_Gateway_Interface" title="Common Gateway Interface">CGI</a> and the <a href="FastCGI" title="FastCGI">FastCGI</a> protocols, and it includes the <a href="Thread_(computer_science)" class="mw-redirect" title="Thread (computer science)">multi-threaded</a>, <a href="Transport_Layer_Security" title="Transport Layer Security">SSL</a>-enabled Rocket<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> wsgiserver.
</p>
<div class="mw-heading mw-heading2"><h2 id="Distinctive_features">Distinctive features</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Web-based_integrated_development_environment_(IDE)">Web-based integrated development environment (IDE)</h3></div>
<p>All <a href="Software_development" title="Software development">development</a>, <a href="Debugging" title="Debugging">debugging</a>, <a href="Software_testing" title="Software testing">testing</a>, <a href="Software_maintenance" title="Software maintenance">maintenance</a> and remote database administration can (optionally) be performed without third-party tools, via a web interface, itself a web2py application. <a href="Internationalization_and_localization" title="Internationalization and localization">Internationalization</a> (adding languages and writing translations) can also be performed from this <a href="Integrated_development_environment" title="Integrated development environment">IDE</a>. Each application has an automatically generated database administrative interface, similar to <a href="Django_(web_framework)" title="Django (web framework)">Django</a>. The web IDE also includes web-based testing.
</p><p>Applications can also be created from the <a href="Command_line" class="mw-redirect" title="Command line">command line</a> or developed with other IDEs.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> Further debugging options:<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li><a href="Wing_IDE" title="Wing IDE">Wing IDE</a> allows graphical debugging of web2py applications<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> as you interact with it from your web browser, you can inspect and modify variables, make function calls etc.</li>
<li><a href="Eclipse_(software)" title="Eclipse (software)">Eclipse</a>/<a href="PyDev" title="PyDev">PyDev</a> — Eclipse with the Aptana PyDev plugin — supports web2py as well.<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup></li>
<li>The extensible pdb debugger is a module of Python's standard library.</li>
<li>With the platform-independent open-source Winpdb debugger, one can perform remote debugging<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> over <a href="TCP/IP" class="mw-redirect" title="TCP/IP">TCP/IP</a>, through encrypted connection.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup></li></ul>
<p>The <a href="%22Hello%2C_World!%22_program" title=""Hello, World!" program">Hello World</a> program with web2py in its simplest form (simple web page<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> with no template) looks like:
</p>
<div class="mw-highlight mw-highlight-lang-python mw-content-ltr" dir="ltr"><pre><span class="k">def</span><span class="w"> </span><span class="nf">hello</span><span class="p">():</span>
<span class="k">return</span> <span class="s1">'Hello World'</span>
</pre></div>
<p>Web2py includes pure Python-based <a href="Template_engine_(web)" class="mw-redirect" title="Template engine (web)">template language</a>, with no <a href="Indent_style" class="mw-redirect" title="Indent style">indentation</a> requirements and a server-side Document Object Model (<a href="Document_Object_Model" title="Document Object Model">DOM</a>).
The template system works without web2py.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> <a href="Joomla" title="Joomla">Joomla</a> 1.x templates can be converted to web2py layouts.<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup>
</p><p>Web2py also includes two markup libraries: the markdown2 text-to-HTML filter, which converts <a href="Markdown" title="Markdown">Markdown</a> markup to HTML <a href="On_the_fly" title="On the fly">on the fly</a>; and markmin which is inspired by markdown but supports tables, html5 video/audio and oembed protocol.
</p><p>A <a href="Model%E2%80%93view%E2%80%93controller#Components" title="Model–view–controller">controller</a> without a view automatically uses a generic view that render the variables returned by the controller, enabling the development of an application's business logic before writing HTML. The "Hello World" example using a default template:
</p>
<div class="mw-highlight mw-highlight-lang-python mw-content-ltr" dir="ltr"><pre><span class="k">def</span><span class="w"> </span><span class="nf">hello</span><span class="p">():</span>
<span class="k">return</span> <span class="nb">dict</span><span class="p">(</span><span class="n">greeting</span><span class="o">=</span><span class="s1">'Hello World'</span><span class="p">)</span>
</pre></div>
<p>The dict() output of an action is automatically rendered in HTML if the page is request with a .html extension, in JSON if the page is requested with a .json extension, in XML if requested with .xml. It supports other protocols including jsonp, rss, ics, google maps, etc. and is extensible.
</p><p>Here is a more complex code example which defines a table, and exposes a grid to logged in users:
</p>
<div class="mw-highlight mw-highlight-lang-python mw-content-ltr" dir="ltr"><pre><span class="n">db</span><span class="o">.</span><span class="n">define_table</span><span class="p">(</span><span class="s1">'thing'</span><span class="p">,</span><span class="n">Field</span><span class="p">(</span><span class="s1">'name'</span><span class="p">,</span><span class="n">notnull</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
<span class="nd">@auth</span><span class="o">.</span><span class="n">requires_login</span><span class="p">()</span>
<span class="k">def</span><span class="w"> </span><span class="nf">hello</span><span class="p">():</span>
<span class="k">return</span> <span class="nb">dict</span><span class="p">(</span><span class="n">grid</span> <span class="o">=</span> <span class="n">SQLFORM</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">thing</span><span class="p">))</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Ticketing_system">Ticketing system</h3></div>
<p>Each web2py application comes with a <a href="Issue_tracking_system" title="Issue tracking system">ticketing system</a>:
</p>
<ul><li>If an error occurs, it is logged and a ticket is issued to the user. That allows error tracking.</li>
<li>Errors and source code are accessible only to the administrator, who can search and retrieve errors by date or client-IP. No error can result in code being exposed to the users.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Portable_cron">Portable cron</h3></div>
<p>Cron is a mechanism for creating and running recurrent tasks in background. It looks for an application-specific <a href="Crontab" class="mw-redirect" title="Crontab">crontab</a> file which is in standard crontab format. Three modes of operation are available:
</p>
<ul><li>Soft cron: <a href="Cron" title="Cron">cron</a> routines are checked after web page content has been served, does not guarantee execution precision. For unprivileged Apache CGI/WSGI installs.</li>
<li>Hard cron: a cron <a href="Thread_(computer_science)" class="mw-redirect" title="Thread (computer science)">thread</a> gets started on web2py startup. For Windows and Rocket/standalone web2py installs.</li>
<li>System cron: cron functions get force-called from the <a href="Command_line" class="mw-redirect" title="Command line">command line</a>, usually from the system crontab. For Unix/Linux systems and places where the cron triggers need to be executed even if web2py is not running at the moment; also good for CGI/WSGI installs if you have access to the system crontab.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Scheduler">Scheduler</h3></div>
<p>Since version 2.3 the use of cron is discouraged since web2py comes with a master/worker scheduler. Jobs can be defined in models and are scheduled by creating an entry in the database. Users can start work processes who pickup and execute tasks in background. The schedule is better than cron because it allows to specify more parameters (start time, stop time, number of repetitions, number of trials in case of error) and do a better job at running within constant resource utilization.
</p>
<div class="mw-heading mw-heading3"><h3 id="Bytecode_distribution">Bytecode distribution</h3></div>
<p>Web2py can compile web applications for distribution in <a href="Bytecode" title="Bytecode">bytecode</a> compiled form, without source code. Unlike frameworks that use specialized template languages for their views, Web2py can also compile the view code into bytecode, since it is pure Python code.
</p>
<div class="mw-heading mw-heading3"><h3 id="Global_Environment">Global Environment</h3></div>
<p>Web2py is unique in the world of Python web frameworks because models and controllers are executed, not imported. They are not modules. They are executed in a single global environment which is initialized at each HTTP request. This design decision has pros and cons.
</p><p>The major pro is the ease of development, specifically for rapid prototyping. Another pro is that all the objects defined within this environment are cleanly reset at each HTTP request and never shared across requests. This means the developer does not need to worry about changing the state of an object (for example the readable attribute of a database field) or worry about a change leaking to other concurrent requests or other applications. A third advantage is that web2py allows the coexistence of multiple applications under the same instance without conflicts even if they use different versions of the same modules or different modules with the same name.
</p><p>The main disadvantage of the global environment is that model files and controller files are not modules and the order of execution matters (although it can be specified using conditional models). Naming conflict is more likely to occur than in normal Python modules. Some standard Python development tools may not understand objects defined in models and controllers. Moreover, developers must be aware that code in models is executed at every request and this may cause a performance penalty. Nothing in web2py prevents developers from using and importing normal Python modules (model-less approach) and for this purpose web2py provides a thread local object (current) to facilitate access to objects associated to the current request. Yet, in this case, the developer has to be aware of the same pitfalls that other frameworks incur: changing the state of an object defined in a module may affect other concurrent requests.
</p><p>Another con is that, because models and controllers are not class-based, efficient code reuse becomes more difficult, particularly as the inability to inherit from a parent controller (e.g. the ApplicationController in Ruby on Rails) means that common controller functionality must be referenced repeatedly across all controller files.
</p>
<div class="mw-heading mw-heading2"><h2 id="Supported_environments">Supported environments</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Operating_systems,_Python_versions_&_implementations,_virtual_machines,_hardware">Operating systems, Python versions & implementations, virtual machines, hardware</h3></div>
<p>web2py runs on <a href="Microsoft_Windows" title="Microsoft Windows">Windows</a>, <a href="Windows_CE" title="Windows CE">Windows CE</a> phones, <a href="Macintosh" class="mw-redirect" title="Macintosh">Mac</a>, <a href="Unix" title="Unix">Unix</a>/<a href="Linux" title="Linux">Linux</a>, <a href="Google_App_Engine" title="Google App Engine">Google App Engine</a>, <a href="Amazon_EC2" class="mw-redirect" title="Amazon EC2">Amazon EC2</a>, and almost any web hosting via Python 2.7/3.5/3.6/pypy.<sup id="cite_ref-web2py_2-1" class="reference"><a href="#cite_note-web2py-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>The current binary version of web2py (for Windows or Mac) includes Python 2.7, but the source version can be run on 2.7 and 3.5+. Support for Python 2.6 has been dropped on 2017.
</p><p>web2py since v1.64.0 runs unmodified on <a href="Java_(software_platform)" title="Java (software platform)">Java</a> with <a href="Jython" title="Jython">Jython</a> 2.5, without any known limitation.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup>
</p><p>web2py code can run with <a href="IronPython" title="IronPython">IronPython</a> on <a href=".NET_Framework" title=".NET Framework">.NET</a>.<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> Limitations:
</p>
<ul><li>no <i>csv</i> module (so no database I/O);</li>
<li>no third party database drivers (not even <a href="SQLite" title="SQLite">SQLite</a>, so no databases at all);</li>
<li>no built-in web server (unless you cripple it by removing <i>signals</i> and <i>logging</i>).</li></ul>
<p>The web2py binary will<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup> run from a <a href="USB_flash_drive" title="USB flash drive">USB drive</a> or a portable hard drive without dependencies, like Portable Python.
</p>
<div class="mw-heading mw-heading3"><h3 id="Web_servers">Web servers</h3></div>
<p>Web2py can service requests via <a href="HTTP" title="HTTP">HTTP</a> and <a href="HTTPS" title="HTTPS">HTTPS</a> with its built-in Rocket server,<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup> with <a href="Apache_HTTP_Server" title="Apache HTTP Server">Apache</a>,<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup> <a href="Lighttpd" title="Lighttpd">Lighttpd</a>,<sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup> <a href="Cherokee_HTTP_Server" class="mw-redirect" title="Cherokee HTTP Server">Cherokee</a>,<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup> <a href="Hiawatha_(web_server)" title="Hiawatha (web server)">Hiawatha</a>, <a href="Nginx" title="Nginx">Nginx</a> and almost any other web server through <a href="Common_Gateway_Interface" title="Common Gateway Interface">CGI</a>, <a href="FastCGI" title="FastCGI">FastCGI</a>, <a href="Web_server_gateway_interface" class="mw-redirect" title="Web server gateway interface">WSGI</a>, <a href="Mod_proxy" title="Mod proxy">mod_proxy</a>,<sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup> and/or <a href="Mod_python" title="Mod python">mod_python</a>.
</p>
<div class="mw-heading mw-heading3"><h3 id="IDEs_and_debuggers">IDEs and debuggers</h3></div>
<p>While a number of web2py developers use <a href="Text_editors" class="mw-redirect" title="Text editors">text editors</a> such as <a href="Vim_(text_editor)" title="Vim (text editor)">Vim</a>, <a href="Emacs" title="Emacs">Emacs</a> or <a href="TextMate" title="TextMate">TextMate</a> Web2py also has a built-in web-based IDE. Others prefer more specialized tools providing debugging, refactoring, etc.
</p>
<ul><li><a href="Aptana_Studio" class="mw-redirect" title="Aptana Studio">Aptana Studio</a> with integrated <a href="PyDev" title="PyDev">PyDev</a></li>
<li><a href="Eclipse_ide" class="mw-redirect" title="Eclipse ide">Eclipse</a> with <a href="PyDev" title="PyDev">PyDev</a></li>
<li><a href="Eric" title="Eric">Eric</a> with built-in debugger.<sup id="cite_ref-27" class="reference"><a href="#cite_note-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup></li>
<li><a href="Wing_IDE" title="Wing IDE">Wing IDE</a><sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup></li>
<li><a href="Microsoft_Visual_Studio" class="mw-redirect" title="Microsoft Visual Studio">Microsoft Visual Studio</a> with <a href="Python_Tools_for_Visual_Studio" title="Python Tools for Visual Studio">Python Tools for Visual Studio</a></li>
<li><a href="PyCharm" title="PyCharm">Pycharm</a>3 has Web2py framework support</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Database_handling">Database handling</h2></div>
<p>The database abstraction layer (<a href="Data_access_layer" title="Data access layer">DAL</a>) of web2py dynamically and transparently generates SQL queries and runs on multiple compatible database backend without the need for database-specific SQL commands (though SQL commands can be issued explicitly).
</p><p><a href="SQLite" title="SQLite">SQLite</a> is included in Python and is the default web2py database. A connection string change allows connection to <a href="Firebird_(database_server)" title="Firebird (database server)">Firebird</a>, <a href="IBM_Db2" title="IBM Db2">IBM Db2</a>, <a href="Informix" title="Informix">Informix</a>, <a href="Ingres_(database)" title="Ingres (database)">Ingres</a>, <a href="Microsoft_SQL_Server" title="Microsoft SQL Server">Microsoft SQL Server</a>, <a href="MySQL" title="MySQL">MySQL</a>, <a href="Oracle_Database" title="Oracle Database">Oracle</a>, <a href="PostgreSQL" title="PostgreSQL">PostgreSQL</a>, and <a href="Google_App_Engine" title="Google App Engine">Google App Engine</a> (GAE) with some caveats. Specialities:
</p>
<ul><li>Multiple database connections.</li>
<li>Automatic table creates and alters.</li>
<li>Automatic <a href="Database_transaction" title="Database transaction">transactions</a>.</li>
<li><a href="Distributed_transaction" title="Distributed transaction">Distributed transactions</a>:
<ul><li>Since web2py v1.17 with PostgreSQL v8.2 and later,<sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-30" class="reference"><a href="#cite_note-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup> because it provides API for <a href="Two-phase_commit_protocol" title="Two-phase commit protocol">two-phase commits</a>.</li>
<li>Since web2py v1.70.1 with Firebird and MySQL (experimental).</li></ul></li>
<li>GAE is not a relational store, but web2py emulates certain operations.</li></ul>
<p>The DAL is fast, at least comparable with <a href="SQLAlchemy" title="SQLAlchemy">SQLAlchemy</a> and <a href="Storm_(software)" title="Storm (software)">Storm</a>.<sup id="cite_ref-31" class="reference"><a href="#cite_note-31"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup>
</p><p>Web2py implements a DAL, not an <a href="Object-relational_mapping" class="mw-redirect" title="Object-relational mapping">ORM</a>. An ORM <a href="Data_mapping" title="Data mapping">maps</a> database tables into <a href="Class_(computer_science)" class="mw-redirect" title="Class (computer science)">classes</a> representing logical abstractions from the database layer (e.g., a User class or a PurchaseOrder class), and maps records into <a href="Object_(computer_science)" title="Object (computer science)">instances</a> of those classes. The DAL instead maps database tables and records into instances of classes representing sets and records instead of higher-level abstractions. It has very similar <a href="Syntax_(programming_languages)" title="Syntax (programming languages)">syntax</a> to an ORM but it is faster, and can map almost any SQL expressions into DAL expressions. The DAL can be used independently of the rest of web2py.<sup id="cite_ref-32" class="reference"><a href="#cite_note-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup>
</p><p>Here are some examples of DAL syntax:
</p>
<div class="mw-highlight mw-highlight-lang-python mw-content-ltr" dir="ltr"><pre><span class="n">db</span> <span class="o">=</span> <span class="n">DAL</span><span class="p">(</span><span class="s2">"postgresql://user:pass@localhost/db"</span><span class="p">,</span> <span class="n">pool_size</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
<span class="n">db</span><span class="o">.</span><span class="n">define_table</span><span class="p">(</span><span class="s2">"person"</span><span class="p">,</span> <span class="n">Field</span><span class="p">(</span><span class="s2">"name"</span><span class="p">),</span> <span class="n">Field</span><span class="p">(</span><span class="s2">"image"</span><span class="p">,</span> <span class="s2">"upload"</span><span class="p">))</span>
<span class="n">db</span><span class="o">.</span><span class="n">person</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s2">"Martin"</span><span class="p">,</span> <span class="n">image</span><span class="o">=</span><span class="nb">open</span><span class="p">(</span><span class="s2">"filename.png"</span><span class="p">))</span>
<span class="n">rows</span> <span class="o">=</span> <span class="n">db</span><span class="p">((</span><span class="n">db</span><span class="o">.</span><span class="n">person</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">"Martin"</span><span class="p">)</span> <span class="o">|</span> <span class="n">db</span><span class="o">.</span><span class="n">person</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">contains</span><span class="p">(</span><span class="s2">"T"</span><span class="p">))</span><span class="o">.</span><span class="n">select</span><span class="p">(</span>
<span class="n">orderby</span><span class="o">=</span><span class="n">db</span><span class="o">.</span><span class="n">person</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="p">)</span>
</pre></div>
<p>The latest version of the DAL has support for 2D GIS functions with Spatialite and PostGIS. The current API are experimental because of a possible move to 3D APIs.
</p>
<div class="mw-heading mw-heading3"><h3 id="Automatic_database_migrations">Automatic database migrations</h3></div>
<p>web2py supports database <a href="Data_migration" title="Data migration">migrations</a>—change the definition of a table and web2py ALTERs the table accordingly. Migrations are automatic, but can be disabled for any table, and migration is typically disabled when an application is ready for live distribution. Migrations and migration attempts are logged, documenting the changes.
</p><p>Limitations:
</p>
<ul><li>SQLite cannot alter table and change a column type, but rather simply stores new values according to the new type.</li>
<li>GAE has no concept of alter-table, so migrations are limited.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Licenses">Licenses</h2></div>
<p>Web2py code is released under <a href="LGPL" class="mw-redirect" title="LGPL">GNU Lesser General Public License</a> (LGPL) version 3 as of web2py version 1.91.1.<sup id="cite_ref-33" class="reference"><a href="#cite_note-33"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup>
</p><p>Web2py code before version 1.91.1 was released under <a href="GNU_General_Public_License#Version_2" title="GNU General Public License">GNU GPL v2.0</a> with commercial exception.
</p><p>Various third-party packages distributed with web2py have their own licenses, generally <a href="Public_domain" title="Public domain">public domain</a>, <a href="MIT" class="mw-redirect" title="MIT">MIT</a> or <a href="BSD" class="mw-redirect" title="BSD">BSD</a>-type licenses. Applications built with web2py are not covered by the LGPL license.
</p><p>Web2py is copyrighted by Massimo DiPierro. The web2py trademark is owned by Massimo DiPierro.
</p>
<div class="mw-heading mw-heading2"><h2 id="Awards">Awards</h2></div>
<p>In 2011 <a href="InfoWorld" title="InfoWorld">InfoWorld</a> ranked web2py highest among the top six Python web frameworks, awarded web2py the Bossie award 2011 for best open source application development software. In 2012 web2py won the <a href="InfoWorld" title="InfoWorld">InfoWorld</a> Technology of the Year award.<sup id="cite_ref-34" class="reference"><a href="#cite_note-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-35" class="reference"><a href="#cite_note-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Publications">Publications</h2></div>
<div class="mw-heading mw-heading3"><h3 id="web2py_Book">web2py Book</h3></div>
<p>The base web2py documentation is The Official web2py Book, by <a href="#Developers">Massimo DiPierro</a>. The manual is a full web2py application and it's freely available online,<sup id="cite_ref-36" class="reference"><a href="#cite_note-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup> in PDF format or printed form.
</p>
<ul><li>1st Edition: <a href="Out_of_print" title="Out of print">out of print</a>. <a href="John_Wiley_%26_Sons" class="mw-redirect" title="John Wiley & Sons">Wiley</a>; September 16, 2008; 256 pages; <style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-470-43232-7</bdi>.</li>
<li>2nd Edition: web2py Manual. Wiley; August 26, 2009; 341 pages; <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-470-59235-9</bdi>.</li>
<li>3rd Edition: Lulu; September 25, 2010 357 pages.</li>
<li>4th Edition: Lulu; December 9, 2011 583 pages.</li>
<li>5th Edition: PDF Copy; March 3, 2013 614 pages; <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-578-12021-8</bdi>.</li>
<li>latest online sources: on GitHub<sup id="cite_ref-37" class="reference"><a href="#cite_note-37"><span class="cite-bracket">[</span>37<span class="cite-bracket">]</span></a></sup></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Online_documentation">Online documentation</h3></div>
<p>Online documentation is linked from the web2py home page, with <a href="Cookbook#Usage_outside_the_world_of_food" title="Cookbook">cookbook</a>, videos, interactive examples, interactive API reference, epydoc s (complete library reference), <a href="FAQ" title="FAQ">FAQ</a>, <a href="Cheat_sheet#As_reference_cards" title="Cheat sheet">cheat sheet</a>, online tools etc.
</p>
<ul><li>Cheat sheet for web2py.</li>
<li>web2pyslices, recipes posted using the movuca social network in web2py.</li>
<li>Crash Course in Web2py (5-part series).</li>
<li>Web2py slides (old).</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Videos">Videos</h3></div>
<ul><li><i>web2py Enterprise Web Framework Tutorial</i>.</li>
<li><i>web2py "Shootout" video tutorial</i>.</li>
<li><i>web2py on the Google appengine</i>.</li>
<li><i>web2py: Create, edit, and deploy a basic web app</i>.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Printed">Printed</h3></div>
<ul><li>"web2py application development cookbook", Packt, 2012</li>
<li><i>Web programming with web2py</i>; <i>Python Magazine</i>; Marco Tabini & Associates, Inc.; June 2008</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Background">Background</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Developers">Developers</h3></div>
<p>The lead developer of web2py is Massimo DiPierro, an associate professor of <a href="Computer_Science" class="mw-redirect" title="Computer Science">Computer Science</a> at <a href="DePaul_University" title="DePaul University">DePaul University</a> in <a href="Chicago" title="Chicago">Chicago</a>. As of 2011, the web2py homepage lists over 70 "main contributors".<sup id="cite_ref-38" class="reference"><a href="#cite_note-38"><span class="cite-bracket">[</span>38<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Development_source_code">Development source code</h3></div>
<p>The web2py development source code is available from the main repository:
</p>
<ul><li><a href="Git_(software)" class="mw-redirect" title="Git (software)">Git</a> on <a href="GitHub" title="GitHub">GitHub</a>: Web2Py</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Third-party_software_included_in_web2py">Third-party software included in web2py</h3></div>
<ul><li>Python-based <a href="Component-based_software_engineering" title="Component-based software engineering">components</a>:
<ul><li>Rocket, a fast, <a href="HTTP/1.1" class="mw-redirect" title="HTTP/1.1">HTTP/1.1</a>-compliant, <a href="Thread_(computer_science)" class="mw-redirect" title="Thread (computer science)">multi-threaded</a>, <a href="Transport_Layer_Security" title="Transport Layer Security">SSL</a>-enabled and <a href="Streaming_media" title="Streaming media">streaming</a>-capable <a href="Web_Server_Gateway_Interface" title="Web Server Gateway Interface">WSGI</a> server;</li>
<li>fcgi.py: a <a href="FastCGI" title="FastCGI">FastCGI</a>/<a href="Web_Server_Gateway_Interface" title="Web Server Gateway Interface">WSGI</a> gateway;</li>
<li>Login API for Janrain, Dropbox, Google, LDAP, PAM, X509, CAS, OpenID, OAuth 1&2, Loginza</li>
<li>simplejson: a simple, fast, complete, correct and extensible <a href="JSON" title="JSON">JSON</a> encoder and decoder;</li>
<li>markdown2: a <a href="Markdown" title="Markdown">Markdown</a> processor;</li>
<li>fpdf a library for PDF generation;</li>
<li>PyRTF: an <a href="Rich_Text_Format" title="Rich Text Format">RTF</a> document generator;</li>
<li>a <a href="Syntax_highlight" class="mw-redirect" title="Syntax highlight">syntax highlighter</a>;</li>
<li>pysimplesoap for SOAP services;</li>
<li>PyRSS2Gen: an <a href="RSS" title="RSS">RSS</a> generator;</li>
<li>feedparser: to parse RSS and <a href="Atom_(standard)" class="mw-redirect" title="Atom (standard)">Atom</a> feeds.</li></ul></li>
<li><a href="JavaScript" title="JavaScript">JavaScript</a>-based components:
<ul><li><a href="JQuery" title="JQuery">jQuery</a>: a lightweight <a href="JavaScript_library" title="JavaScript library">JavaScript library</a>;</li>
<li><a href="CodeMirror" title="CodeMirror">CodeMirror</a>: a free editor for source code;</li></ul></li>
<li><a href="C_(programming_language)" title="C (programming language)">C</a>-based components:
<ul><li><a href="SQLite" title="SQLite">SQLite</a>: a <a href="Relational_database" title="Relational database">relational database</a>;</li>
<li><a href="Memcached" title="Memcached">memcached</a>: a general-purpose distributed memory caching system.</li>
<li>Payment API for Authorize.Net, Google Wallet, Stripe.com</li></ul></li></ul>
<div class="mw-heading mw-heading2"><h2 id="History_and_naming">History and naming</h2></div>
<p>The source code for the first public version of web2py was released under GNU GPL v2.0 on 2007-09-27 by <a href="#Developers">Massimo DiPierro</a> as the <i>Enterprise Web Framework</i> (EWF). The name was changed twice due to name conflicts: EWF v1.7 was followed by Gluon v1.0, and Gluon v1.15 was followed by web2py v1.16. The license was changed to LGPLv3 as of web2py version 1.91.1 on 2010-12-21.
</p>
<div class="mw-heading mw-heading2"><h2 id="Applications_built_on_Web2py">Applications built on Web2py</h2></div>
<ul><li>Movuca <a href="Content_management_system" title="Content management system">CMS</a> and Social Network Engine.</li>
<li>Instant Press <a href="Blog" title="Blog">Blog</a> platform.</li>
<li>Ourway Social networking site.</li>
<li>NoobMusic A rock music website.</li>
<li>LinkFindr Network diagnostic tool.</li>
<li>StarMaker Develops karaoke-style social music apps.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Notes">Notes</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist reflist-columns references-column-width" style="column-width: 30em;">
<ol class="references">
<li id="cite_note-wikidata-f3fe63ae355e0f9cef1873a010dccf77c60e7033-v20-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-wikidata-f3fe63ae355e0f9cef1873a010dccf77c60e7033-v20_1-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.web2py.com/">"web2py Web Framework"</a>.</cite></span>
</li>
<li id="cite_note-web2py-2"><span class="mw-cite-backlink">^ <a href="#cite_ref-web2py_2-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-web2py_2-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.web2py.com/init/default/what">"What is web2py?"</a>. <i>web2py.com</i>. Web2py<span class="reference-accessdate">. Retrieved <span class="nowrap">2023-10-31</span></span>.</cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.web2py.com/AlterEgo/default/show/226">Web2py speaks multiple protocols since v1.63</a></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.web2py.com/AlterEgo/default/show/165">Using SOAP with web2py</a></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://evolt.org/writing_smart_web-based_forms">Writing Smart Web-based Forms</a></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://launchpad.net/rocket">Rocket Web Server</a></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.web2py.com/AlterEgo/default/show/178">Web2py online IDE</a> with <i><a rel="nofollow" class="external text" href="https://addons.mozilla.org/hu/firefox/addon/4125">It's All Text!</a></i> Firefox addon and <a rel="nofollow" class="external text" href="https://code.google.com/p/ulipad">Ulipad</a> (open source Python IDE)</span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://stackoverflow.com/questions/315165/how-to-debug-web2py-applications">How to debug Web2py applications?</a></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.wingware.com/doc/howtos/web2py">Wing IDE supports debugging for web2py</a></span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://groups.google.com/group/web2py/browse_thread/thread/c27b4f7cf3328520">Eclipse/PyDev supports debugging for web2py</a></span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://allisterx.blogspot.com/2009/06/using-web2py-framework-on-eclipse.html">Using web2py on Eclipse</a></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://winpdb.org/docs/requirements/">With Winpdb one can do remote debugging over TCP/IP</a></span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://winpdb.org/docs/security/">Encrypted communication in Winpdb</a></span>
</li>
<li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.web2py.com/examples/simple_examples/hello1">Simplest web page with web2py: "Hello World" example</a></span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://groups.google.com/group/web2py/browse_thread/thread/c81061bc00c6181e">How to use web2py templates without web2py</a></span>
</li>
<li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.web2py.com/AlterEgo/default/show/167">Using Joomla templates with web2py</a></span>
</li>
<li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.web2py.com/AlterEgo/default/show/228">Web2py runs fully on Java and J2EE using Jython</a></span>
</li>
<li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://stackoverflow.com/questions/437160/ironpython-webframework">Web2py runs with IronPython on .NET, with limitations</a></span>
</li>
<li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.web2py.com/AlterEgo/default/show/133">MySQL with web2py Windows binary on a USB thumb-drive</a></span>
</li>
<li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.web2py.com/AlterEgo/default/show/140">How to run the built-in SSL server</a></span>
</li>
<li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.web2py.com/AlterEgo/default/show/38">Web2py with Apache and mod_ssl</a></span>
</li>
<li id="cite_note-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-22">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.web2py.com/AlterEgo/default/show/19">Web2py with Lighttpd and FastCGI</a></span>
</li>
<li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.web2py.com/AlterEgo/default/show/184">Web2py with Cherokee</a></span>
</li>
<li id="cite_note-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-24">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://httpd.apache.org/docs/2.0/mod/mod_proxy.html">Apache Module mod_proxy</a></span>
</li>
<li id="cite_note-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-25">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.web2py.com/AlterEgo/default/show/17">Web2py with mod_proxy</a></span>
</li>
<li id="cite_note-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-26">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.web2py.com/AlterEgo/default/show/136">Web2py with mod_proxy and mod_proxy_html</a></span>
</li>
<li id="cite_note-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-27">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://eric-ide.python-projects.org">Eric IDE Project</a></span>
</li>
<li id="cite_note-28"><span class="mw-cite-backlink"><b><a href="#cite_ref-28">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.wingware.com/doc/howtos/web2py">Using Wing IDE with web2py</a></span>
</li>
<li id="cite_note-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-29">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://mdp.cti.depaul.edu/AlterEgo/default/show/70">Distributed transactions with PostgreSQL</a></span>
</li>
<li id="cite_note-30"><span class="mw-cite-backlink"><b><a href="#cite_ref-30">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://groups.google.com/group/web2py/browse_thread/thread/235ed49f620a3c3d">Distributed transactions with PostgreSQL — further details</a></span>
</li>
<li id="cite_note-31"><span class="mw-cite-backlink"><b><a href="#cite_ref-31">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.web2py.com/AlterEgo/default/show/76">ORM Benchmark</a></span>
</li>
<li id="cite_note-32"><span class="mw-cite-backlink"><b><a href="#cite_ref-32">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.web2py.com/AlterEgo/default/show/215">How to use web2py DAL without web2py</a></span>
</li>
<li id="cite_note-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-33">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.web2py.com/examples/default/license">web2py License Agreement</a></span>
</li>
<li id="cite_note-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-34">^</a></b></span> <span class="reference-text"><cite id="CITEREFGrehan" class="citation news cs1">Grehan, Rick. <a rel="nofollow" class="external text" href="http://www.infoworld.com/d/application-development/pillars-python-six-python-web-frameworks-compared-169442">"Pillars of Python: Six Python Web frameworks compared"</a>. <i>InfoWorld</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2017-11-30</span></span>.</cite></span>
</li>
<li id="cite_note-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-35">^</a></b></span> <span class="reference-text"><cite id="CITEREFstaff" class="citation news cs1">staff, InfoWorld Reviews. <a rel="nofollow" class="external text" href="http://www.infoworld.com/slideshow/24605/infoworlds-2012-technology-of-the-year-award-winners-183313#slide23">"InfoWorld's 2012 Technology of the Year Award winners"</a>. <i>InfoWorld</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2017-11-30</span></span>.</cite></span>
</li>
<li id="cite_note-36"><span class="mw-cite-backlink"><b><a href="#cite_ref-36">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://web2py.com/book">"web2py - The official manual online"</a>. <i>web2py.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-11-14</span></span>.</cite></span>
</li>
<li id="cite_note-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-37">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/web2py/web2py-book">"web2py/web2py-book"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-11-14</span></span>.</cite></span>
</li>
<li id="cite_note-38"><span class="mw-cite-backlink"><b><a href="#cite_ref-38">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.web2py.com/examples/default/who">List of main contributors to web2py</a></span>
</li>
</ol></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1266661725">
/* start https://en.wikipedia.org/ */
.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:1px solid var(--border-color-base,#a2a9b1);padding:0.1em;background:var(--background-color-neutral-subtle,#f8f9fa)}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}
/* end https://en.wikipedia.org/ */
</style>
<ul><li><span class="official-website"><span class="url"><a rel="nofollow" class="external text" href="http://www.web2py.com">Official website</a></span></span> </li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Python_web_frameworks122" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div id="Python_web_frameworks122" style="font-size:114%;margin:0 4em"><a href="Python_(programming_language)" title="Python (programming language)">Python</a> <a href="Web_framework" title="Web framework">web frameworks</a></div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="CherryPy" title="CherryPy">CherryPy</a></li>
<li><a href="CubicWeb" title="CubicWeb">CubicWeb</a></li>
<li><a href="Django_(web_framework)" title="Django (web framework)">Django</a></li>
<li><a href="FastAPI" title="FastAPI">FastAPI</a></li>
<li><a href="Flask_(web_framework)" title="Flask (web framework)">Flask</a></li>
<li><a href="Grok_(web_framework)" class="mw-redirect" title="Grok (web framework)">Grok</a></li>
<li><a href="Nevow" class="mw-redirect" title="Nevow">Nevow</a></li>
<li><a href="Pylons_project#Pylons_Framework" title="Pylons project">Pylons</a></li>
<li><a href="Pylons_project#Pyramid" title="Pylons project">Pyramid</a></li>
<li><a href="Quixote_(web_framework)" title="Quixote (web framework)">Quixote</a></li>
<li><a href="Tornado_(web_server)" title="Tornado (web server)">Tornado</a></li>
<li><a href="TurboGears" title="TurboGears">TurboGears</a></li>
<li><a href="Twisted_(software)" title="Twisted (software)">TwistedWeb</a></li>
<li><a href="Zope#Zope_2" title="Zope">Zope 2</a></li>
<li><i>more</i>...</li></ul>
</div></td></tr><tr><td class="navbox-abovebelow hlist" colspan="2"><div>
<ul><li><a href="Comparison_of_server-side_web_frameworks#Python" title="Comparison of server-side web frameworks">Comparison</a></li></ul>
</div></td></tr></tbody></table></div>
<div class="navbox-styles"></div><div role="navigation" class="navbox" aria-labelledby="Web_frameworks386" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Web_frameworks386" style="font-size:114%;margin:0 4em"><a href="Web_framework" title="Web framework">Web frameworks</a></div></th></tr><tr><td class="navbox-abovebelow hlist" colspan="2"><div>
<ul><li><a href="Comparison_of_server-side_web_frameworks" title="Comparison of server-side web frameworks">Comparison</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href=".NET" title=".NET">.NET</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="ASP.NET" title="ASP.NET">ASP.NET</a>
<ul><li><a href="ASP.NET_Core" title="ASP.NET Core">Core</a></li>
<li><a href="ASP.NET_AJAX" title="ASP.NET AJAX">AJAX</a></li>
<li><a href="ASP.NET_Dynamic_Data" title="ASP.NET Dynamic Data">Dynamic Data</a></li>
<li><a href="ASP.NET_MVC" title="ASP.NET MVC">MVC</a></li>
<li><a href="ASP.NET_Razor" title="ASP.NET Razor">Razor</a></li>
<li><a href="ASP.NET_Web_Forms" title="ASP.NET Web Forms">Web Forms</a></li></ul></li>
<li><a href="Blazor" title="Blazor">Blazor</a></li>
<li><a href="DotNetNuke" class="mw-redirect" title="DotNetNuke">DNN</a></li>
<li><a href="Base_One_Foundation_Component_Library" title="Base One Foundation Component Library">BFC</a></li>
<li><a href="MonoRail_(software)" title="MonoRail (software)">MonoRail</a></li>
<li><a href="Umbraco" title="Umbraco">Umbraco</a></li>
<li><a href="WebSharper" title="WebSharper">WebSharper</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="C%2B%2B" title="C++">C++</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="CppCMS" title="CppCMS">CppCMS</a></li>
<li><a href="Drogon_(software)" title="Drogon (software)">Drogon</a></li>
<li><a href="Wt_(web_toolkit)" title="Wt (web toolkit)">Wt</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Adobe_ColdFusion" title="Adobe ColdFusion">ColdFusion</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="ColdBox_Platform" title="ColdBox Platform">ColdBox Platform</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Common_Lisp" title="Common Lisp">Common Lisp</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="CL-HTTP" title="CL-HTTP">CL-HTTP</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Haskell" title="Haskell">Haskell</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Servant_(web_framework)" title="Servant (web framework)">Servant</a></li>
<li><a href="Snap_(web_framework)" title="Snap (web framework)">Snap</a></li>
<li><a href="Yesod_(web_framework)" title="Yesod (web framework)">Yesod</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Java_(software_platform)" title="Java (software platform)">Java</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="AppFuse" title="AppFuse">AppFuse</a></li>
<li><a href="Grails_(framework)" title="Grails (framework)">Grails</a></li>
<li><a href="Google_Web_Toolkit" title="Google Web Toolkit">GWT</a></li>
<li><a href="ICEfaces" title="ICEfaces">ICEfaces</a></li>
<li><a href="JHipster" title="JHipster">JHipster</a></li>
<li><a href="JWt_(Java_web_toolkit)" title="JWt (Java web toolkit)">JWt</a></li>
<li><a href="Jakarta_Faces#JSF_and_Ajax" title="Jakarta Faces">Mojarra</a></li>
<li><a href="Play_Framework" title="Play Framework">Play</a></li>
<li><a href="Remote_Application_Platform" title="Remote Application Platform">Remote Application Platform</a></li>
<li><a href="JBoss_Seam" title="JBoss Seam">Seam</a></li>
<li><a href="Apache_Sling" title="Apache Sling">Sling</a></li>
<li><a href="Spring_Framework#Model-view-controller_framework" title="Spring Framework">Spring</a></li>
<li><a href="Stripes_(framework)" title="Stripes (framework)">Stripes</a></li>
<li><a href="Apache_Struts" title="Apache Struts">Struts</a></li>
<li><a href="Apache_Tapestry" title="Apache Tapestry">Tapestry</a></li>
<li><a href="Vaadin" title="Vaadin">Vaadin</a></li>
<li><a href="Vert.x" title="Vert.x">Vert.x</a></li>
<li><a href="Apache_Wicket" title="Apache Wicket">Wicket</a></li>
<li><a href="WaveMaker" title="WaveMaker">WaveMaker</a></li>
<li><a href="ZK_(framework)" title="ZK (framework)">ZK</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="JavaScript" title="JavaScript">JavaScript</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Angular_(web_framework)" title="Angular (web framework)">Angular</a>/<a href="AngularJS" title="AngularJS">AngularJS</a></li>
<li><a href="Backbone.js" title="Backbone.js">Backbone.js</a></li>
<li><a href="Google_Closure_Tools" title="Google Closure Tools">Closure</a></li>
<li><a href="Dojo_Toolkit" title="Dojo Toolkit">Dojo Toolkit</a></li>
<li><a href="Ember.js" title="Ember.js">Ember.js</a></li>
<li><a href="Express.js" title="Express.js">Express.js</a></li>
<li><a href="Ext_JS" title="Ext JS">Ext JS</a></li>
<li><a href="Fastify" title="Fastify">Fastify</a></li>
<li><a href="Htmx" title="Htmx">htmx</a></li>
<li><a href="JQuery" title="JQuery">jQuery</a></li>
<li><a href="Knockout.js" class="mw-redirect" title="Knockout.js">Knockout.js</a></li>
<li><a href="Meteor_(web_framework)" title="Meteor (web framework)">Meteor</a></li>
<li><a href="MooTools" title="MooTools">MooTools</a></li>
<li><a href="NestJS" title="NestJS">NestJS</a></li>
<li><a href="Next.js" title="Next.js">Next.js</a></li>
<li><a href="Nuxt.js" class="mw-redirect" title="Nuxt.js">Nuxt.js</a></li>
<li><a href="Node.js" title="Node.js">Node.js</a></li>
<li><a href="OpenUI5" title="OpenUI5">OpenUI5</a></li>
<li><a href="Prototype_JavaScript_Framework" title="Prototype JavaScript Framework">Prototype</a></li>
<li><a href="React_(software)" title="React (software)">React</a></li>
<li><a href="Remix_(web_framework)" class="mw-redirect" title="Remix (web framework)">Remix</a></li>
<li><a href="Sencha_Touch" title="Sencha Touch">Sencha Touch</a></li>
<li><a href="SproutCore" title="SproutCore">SproutCore</a></li>
<li><a href="Svelte" title="Svelte">Svelte</a></li>
<li><a href="Vue.js" title="Vue.js">Vue.js</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Perl" title="Perl">Perl</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Catalyst_(software)" title="Catalyst (software)">Catalyst</a></li>
<li><a href="Dancer_(software)" title="Dancer (software)">Dancer</a></li>
<li><a href="Maypole_framework" class="mw-redirect" title="Maypole framework">Maypole</a></li>
<li><a href="Mojolicious" title="Mojolicious">Mojolicious</a></li>
<li><a href="WebGUI" title="WebGUI">WebGUI</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="PHP" title="PHP">PHP</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="CakePHP" title="CakePHP">CakePHP</a></li>
<li><a href="CodeIgniter" title="CodeIgniter">CodeIgniter</a></li>
<li><a href="Drupal" title="Drupal">Drupal</a></li>
<li><a href="EZ_Publish" title="EZ Publish">eZ Publish</a></li>
<li><a href="Fat-Free_Framework" title="Fat-Free Framework">Fat-Free</a></li>
<li><a href="Neos_Flow" title="Neos Flow">Flow</a></li>
<li><a href="FuelPHP" title="FuelPHP">FuelPHP</a></li>
<li><a href="Grav_(CMS)" title="Grav (CMS)">Grav</a></li>
<li><a href="Gyroscope_(software)" title="Gyroscope (software)">Gyroscope</a></li>
<li><a href="Horde_(software)" title="Horde (software)">Horde</a></li>
<li><a href="Joomla" title="Joomla">Joomla!</a></li>
<li><a href="Laminas" title="Laminas">Laminas</a></li>
<li><a href="Laravel" title="Laravel">Laravel</a></li>
<li><a href="Li3_(software)" title="Li3 (software)">li₃</a></li>
<li><a href="Midgard_(software)" title="Midgard (software)">Midgard</a></li>
<li><a href="MODX" title="MODX">MODX</a></li>
<li><a href="Phalcon_(framework)" title="Phalcon (framework)">Phalcon</a></li>
<li><a href="PHP-Fusion" title="PHP-Fusion">PHP-Fusion</a></li>
<li><a href="PHP-Nuke" title="PHP-Nuke">PHP-Nuke</a></li>
<li><a href="Pop_PHP_Framework" title="Pop PHP Framework">Pop PHP</a></li>
<li><a href="PRADO_(framework)" title="PRADO (framework)">PRADO</a></li>
<li><a href="ProcessWire" title="ProcessWire">ProcessWire</a></li>
<li><a href="Qcodo" title="Qcodo">Qcodo</a></li>
<li><a href="Silverstripe_CMS" title="Silverstripe CMS">Silverstripe</a></li>
<li><a href="Symfony" title="Symfony">Symfony</a></li>
<li><a href="TYPO3" title="TYPO3">TYPO3</a></li>
<li><a href="WordPress" title="WordPress">WordPress</a></li>
<li><a href="XOOPS" title="XOOPS">XOOPS</a></li>
<li><a href="Yii" title="Yii">Yii</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Python_(programming_language)" title="Python (programming language)">Python</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Zope#BlueBream" title="Zope">BlueBream</a></li>
<li><a href="CherryPy" title="CherryPy">CherryPy</a></li>
<li><a href="CubicWeb" title="CubicWeb">CubicWeb</a></li>
<li><a href="Django_(web_framework)" title="Django (web framework)">Django</a></li>
<li><a href="FastAPI" title="FastAPI">FastAPI</a></li>
<li><a href="Flask_(web_framework)" title="Flask (web framework)">Flask</a></li>
<li><a href="Grok_(web_framework)" class="mw-redirect" title="Grok (web framework)">Grok</a></li>
<li><a href="Nevow" class="mw-redirect" title="Nevow">Nevow</a></li>
<li><a href="Pyjs" title="Pyjs">Pyjs</a></li>
<li><a href="Pylons_project#Pylons_Framework" title="Pylons project">Pylons</a></li>
<li><a href="Pylons_project#Pyramid" title="Pylons project">Pyramid</a></li>
<li><a href="Quixote_(web_framework)" title="Quixote (web framework)">Quixote</a></li>
<li><a href="Tornado_(web_server)" title="Tornado (web server)">Tornado</a></li>
<li><a href="TurboGears" title="TurboGears">TurboGears</a></li>
<li><a href="Zope#Zope_2" title="Zope">Zope 2</a></li>
<li><i>more</i>...</li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Merb" title="Merb">Merb</a></li>
<li><a href="Padrino_(web_framework)" title="Padrino (web framework)">Padrino</a></li>
<li><a href="Ruby_on_Rails" title="Ruby on Rails">Ruby on Rails</a></li>
<li><a href="Sinatra_(software)" title="Sinatra (software)">Sinatra</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Rust_(programming_language)" title="Rust (programming language)">Rust</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Rocket_(web_framework)" title="Rocket (web framework)">Rocket</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Scala_(programming_language)" title="Scala (programming language)">Scala</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Lift_(web_framework)" title="Lift (web framework)">Lift</a></li>
<li><a href="Play_Framework" title="Play Framework">Play</a></li>
<li><a href="Scalatra" title="Scalatra">Scalatra</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Smalltalk" title="Smalltalk">Smalltalk</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="AIDA/Web" title="AIDA/Web">AIDA/Web</a></li>
<li><a href="Seaside_(software)" title="Seaside (software)">Seaside</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Other languages</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Oracle_Application_Express" title="Oracle Application Express">Application Express</a> (<a href="PL/SQL" title="PL/SQL">PL/SQL</a>)</li>
<li><a href="Grails_(framework)" title="Grails (framework)">Grails</a> (<a href="Groovy_(programming_language)" class="mw-redirect" title="Groovy (programming language)">Groovy</a>)</li>
<li><a href="OpenACS" class="mw-redirect" title="OpenACS">OpenACS</a> (<a href="Tcl" title="Tcl">Tcl</a>)</li>
<li><a href="Phoenix_(web_framework)" title="Phoenix (web framework)">Phoenix</a> (<a href="Elixir_(programming_language)" title="Elixir (programming language)">Elixir</a>)</li>
<li><a href="Shiny_(web_framework)" title="Shiny (web framework)">Shiny (web framework)</a> (<a href="R_(programming_language)" title="R (programming language)">R</a>)</li>
<li><a href="SproutCore" title="SproutCore">SproutCore</a> (<a href="JavaScript" title="JavaScript">JavaScript</a>-<a href="Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a>)</li>
<li><a href="Yaws_(web_server)" title="Yaws (web server)">Yaws</a> (<a href="Erlang_(programming_language)" title="Erlang (programming language)">Erlang</a>)</li></ul>
</div></td></tr></tbody></table></div>
<div class="navbox-styles"></div><div role="navigation" class="navbox authority-control" aria-label="Navbox390" style="padding:3px"><table class="nowraplinks hlist navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Authority control databases: National </th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/7748810-6">Germany</a></span></li></ul></div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-02-03" href="https://en.wikipedia.org/wiki/?title=Web2py&oldid=1273693140">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>